package control_centre

import (
	"github.com/hajimehoshi/ebiten/v2"
	"study/PlantsVsZombies1/utils"
	"time"
)

// -----提前加载资源------

var cfgInit *Config
var Images = make(map[string]*ebiten.Image)
var PlantCardSlice = []string{}
var PlantCardCoordination = map[string]struct {
	Top    float64
	Bottom float64
	Right  float64
	Left   float64
}{}
var GrowPlantImageSlice = map[string][]*ebiten.Image{}
var LastTimePlantDynamics time.Time

// ------鼠标状态------

// MouseBindPlantImagePath 需要用到的全局变量
var MouseBindPlantImagePath *ebiten.Image = nil

// ------草坪-------

// TurfGrid 草坪，位置计算
var TurfGrid [5][9]map[int]struct {
	state             int // 0:空 1:植物 2:僵尸 // --0就是植物
	Top               float64
	Bottom            float64
	Right             float64
	Left              float64
	SwingTimeInterval int
	lastTime          time.Time
	Image             []*ebiten.Image

	NamePlant            string         // 植物姓名
	PlantHp              int            // 植物血量
	LinePosition         int            // 植物所处行距
	PlantSituation       PlantSituation // 植物状态
	PlantAttackFrequency int            // 植物攻击频率
	PlantLastTimeAttack  time.Time      // 植物上一次攻击的时间

	CherryBombDisplayCount int // 樱桃炸弹存在次数
}

// Pea 豌豆
type Pea struct {
	left              float64
	top               float64
	bottom            float64
	right             float64
	speed             float64
	continueTime      int
	state             JudgeCollision
	displayNum        int
	peaFirstCollision int
}

var (
	peaImage     [2]*ebiten.Image
	peaAll       []Pea
	peaShootTime time.Time
)
var (
	cherryBombLastImage *ebiten.Image
)
var (
	nutWallHp         int
	NutWallStateImage []*ebiten.Image
)

// StaticVariable 全局变量
type StaticVariable struct {
	GrowPlantTemporaryName string // 种植植物时创建的临时名字
}

// AdventureEntranceSlice -游戏入口-
var AdventureEntranceSlice = []*ebiten.Image{}
var AdventureEntranceLastTime time.Time

// ZombieDate 僵尸结构体
type ZombieDate struct {
	Top                    float64
	Bottom                 float64
	Right                  float64
	Left                   float64
	speed                  float64
	EnterTheArenaTime      int // 进入战场时刻
	LinePosition           int
	ZombieHP               int       // 僵尸血量
	ZombieState            LiftState // 僵尸状态
	ZombieCountdownToDeath time.Time // 僵尸倒计时
	ZombieEat              zombieEat // 僵尸吃
}

var zombie []map[string]ZombieDate

var EnterTheArenaPreheatTime time.Time // 预热时间
var ZombieToggleMovement time.Time
var (
	ZombieSlice     = []*ebiten.Image{} // 僵尸正常图片
	ZombieDead      = []*ebiten.Image{} // 僵尸死亡图片
	ZombieBombImage *ebiten.Image       // 僵尸爆炸图片
	ZombieEating    = []*ebiten.Image{}
	ZombieEatDead   = []*ebiten.Image{} // 僵尸吃死图片
) // 僵尸爆炸图片

var ZombieExistence = [5]PlantSituation{secure} //  创建草坪是否存在僵尸

// -----初始化-----

func init() {
	// 加载配置文件
	cfgInit = LoadConfig()
	// 加载MainMenu图片
	AdventureEntranceSlice = utils.LoadAdventureEntranceImage()
	// 作战背景
	Images = LoadImage()

	// 加载植物选择框
	Load_select_plant_card(Images)
	// 计算坐标，卡牌的
	PlantCardCoordination = utils.CalculatePlantCardCoordination(PlantCardSlice, Images)
	// 初始化草坪，为种植植物做准备
	CalcTurfCoordinates()
	GrowPlantImageSlice = utils.LoadGrowPlantImage()

	// 植物衍生图片 - 豌豆攻击，樱桃炸、浆果
	peaImage = utils.LoadPeaImage()
	cherryBombLastImage = utils.LoadCherryBombLastImage()
	NutWallStateImage = utils.LoadNutWallImage()

	// 加载僵尸图片
	ZombieSlice = utils.LoadZombieImageSlice()
	ZombieDead = utils.LoadZombieDeadImageSlice()
	ZombieBombImage = utils.LoadZombieBombImage()
	ZombieEating = utils.LoadZombieEatImage()
	ZombieEatDead = utils.LoadZombieEatDeadImage()

	// 加载僵尸大军
	InitZombie(cfgInit)

}
